contents
CI/CD에 대해 질문하신 것으로 가정하고 답변해 드리겠습니다. 이는 현대 소프트웨어 개발의 핵심적인 관행입니다. CI/CD는 지속적 통합(Continuous Integration) 과 지속적 전달(Continuous Delivery) / 지속적 배포(Continuous Deployment) 의 약자입니다. 이는 개발팀이 소프트웨어를 더 빠르고 안정적으로 빌드, 테스트, 릴리즈할 수 있게 해주는 자동화된 관행의 집합입니다.
각 부분을 자세히 살펴보겠습니다.
파트 1: 지속적 통합 (CI) 🔄
지속적 통합은 개발자들이 자신의 코드 변경 사항을 중앙 공유 저장소(예: Git의 main 브랜치)에 자주 병합(merge)하는 관행입니다. 핵심은 각 병합이 자동화된 빌드 및 테스트 프로세스를 트리거한다는 점입니다.
CI가 해결하는 문제
CI 이전에는 개발자들이 종종 몇 주 또는 몇 달 동안 장기간의 기능 브랜치에서 독립적으로 작업했습니다. 마침내 모든 것을 병합할 때가 되면, 이는 충돌하는 코드, 숨겨진 버그, 그리고 모든 사람의 작업을 통합하려는 며칠간의 노력으로 가득 찬 "머지 헬(merge hell, 통합 지옥)"로 이어졌습니다.
CI 프로세스
CI는 작은 변경 사항을 자주 통합함으로써 이 문제를 해결합니다. 일반적인 자동화 워크플로우는 다음과 같습니다.
- 코드 커밋: 개발자가 작은 변경 사항을 커밋하고 버전 관리 저장소에 푸시(push)합니다.
- 자동화된 빌드: CI 서버(Jenkins, GitHub Actions, GitLab CI 등)가 푸시를 감지하고 자동으로 최신 코드를 가져옵니다. 그런 다음 코드를 컴파일하고, 의존성을 해결하며, 실행 파일이나 패키지를 생성하여 애플리케이션을 빌드합니다.
- 자동화된 테스트: 빌드가 성공하면 서버는 자동화된 테스트 스위트를 실행합니다. 여기에는 일반적으로 다음이 포함됩니다.
- 단위 테스트: 개별 함수나 컴포넌트를 검증합니다.
- 통합 테스트: 애플리케이션의 여러 부분이 함께 올바르게 작동하는지 확인합니다.
- 피드백: 빌드 및 테스트 결과는 즉시 팀에 보고됩니다. 빌드나 테스트가 실패하면("빨간" 빌드), 팀은 즉시 알림을 받아 문제를 해결할 수 있습니다. 모든 것이 통과되면("녹색" 빌드), 코드는 성공적으로 통합된 것으로 간주됩니다.
CI의 핵심 목표는 통합 버그를 조기에 그리고 자주 찾아 수정하는 것입니다.
파트 2: 지속적 전달 & 지속적 배포 (CD) 🚀
CD는 CI의 다음 단계입니다. 성공적으로 통합된 코드의 릴리즈를 자동화합니다. 여기에는 밀접하게 관련된 두 가지 개념이 있습니다.
A. 지속적 전달 (Continuous Delivery)
지속적 전달은 CI의 확장입니다. 이는 자동화된 테스트를 통과한 모든 변경 사항이 릴리즈를 위해 자동으로 준비되고 패키징됨을 의미합니다. 그 결과물( "아티팩트")은 테스트 또는 스테이징 환경에 배포되며, 언제든지 운영 환경에 배포될 준비가 된 것으로 간주됩니다.
- 핵심 특징: 운영 환경으로의 최종 배포는 여전히 수동 단계입니다. 버튼 클릭 한 번일 수 있지만, 언제 릴리즈할지에 대한 비즈니스 결정은 사람(프로젝트 관리자나 팀 리더 등)이 내립니다.
- 비유: 소프트웨어 패키지가 선적 준비가 되어 포장된 채로 선착장에 놓여 있습니다. 당신은 그저 "배송" 버튼을 누르기만 하면 됩니다.
B. 지속적 배포 (Continuous Deployment)
지속적 배포는 지속적 전달을 한 단계 더 발전시킨 것입니다. 이는 자동화된 파이프라인의 모든 단계를 통과한 모든 변경 사항이 인간의 개입 없이 자동으로 운영 환경에 배포되는 관행입니다.
- 핵심 특징: 운영 릴리즈 전에 수동 승인 단계가 없습니다. 코드가
main에 병합될 만큼 좋다면, 사용자에게 제공될 만큼 좋다는 철학입니다. - 비유: 패키지가 선착장에 준비되자마자, 로봇이 자동으로 트럭에 싣고 배송을 시작합니다.
요약:
- 지속적 통합: 항상
main브랜치를 테스트하고 작동 가능한 상태로 유지합니다. - 지속적 전달: 항상 운영 환경에 배포할 준비가 된 버전을 보유합니다.
- 지속적 배포: 모든 통과된 버전을 자동으로 운영 환경에 배포합니다.
완전한 CI/CD 파이프라인
완전한 CI/CD 파이프라인은 코드 커밋부터 운영 환경 배포까지 전체 소프트웨어 릴리즈 프로세스를 자동화합니다.
코드 커밋 ➔ 빌드 ➔ 테스트 (CI) ➔ 릴리즈 준비된 아티팩트 (지속적 전달) ➔ 운영 환경에 배포 (지속적 배포)
CI/CD의 이점 ✅
CI/CD를 채택하면 엄청난 이점을 얻을 수 있습니다.
- 더 빠른 릴리즈 주기: 빌드 및 릴리즈 프로세스를 자동화하여 팀이 사용자에게 더 자주 기능을 제공할 수 있습니다.
- 향상된 코드 품질: 작은 변경 사항을 자주 통합하고 테스트함으로써, 버그를 더 작고 수정하기 쉬운 초기에 발견할 수 있습니다.
- 리스크 감소: 몇 달에 한 번씩 거대한 업데이트를 릴리즈하는 것보다 작은 증분 업데이트를 릴리즈하는 것이 훨씬 덜 위험합니다. 문제가 발생하면 원인을 정확히 찾아내고 롤백하기가 더 쉽습니다.
- 개발자 생산성 향상: 자동화는 개발자를 수동적이고 오류가 발생하기 쉬운 배포 작업에서 해방시켜, 코드 작성에 더 집중할 수 있게 합니다.
인기 있는 CI/CD 도구
- Jenkins: 독창적이고 확장성이 뛰어난 오픈소스 자동화 서버입니다.
- GitLab CI/CD: GitLab 플랫폼에 완벽하게 통합된 강력한 CI/CD 도구입니다.
- GitHub Actions: 코드 저장소와 긴밀하게 통합된 GitHub의 네이티브 CI/CD 도구입니다.
- CircleCI: 속도와 단순함으로 유명한 인기 있는 클라우드 기반 CI/CD 플랫폼입니다.
- Travis CI: 특히 오픈소스 커뮤니티에서 인기가 많은 또 다른 잘 알려진 클라우드 기반 서비스입니다.
references